//导入mysql模块
const mysql = require('mysql')
//建立与MySQL 数据库的连接
const db = mysql.createPool({
    host: '127.0.0.1', //数据库的IP地址
    user: 'root',//登录数据库的账号
    password: '123456', //登录数据库的密码
    database: 'my_db_01' //指定要操作哪个数据库
})



// // 1.查询  my_db_01数据库中users表中的所有数据
// db.query('select * from users', (err, res) => {
//     if (err) {
//         return console.log('查询失败');
//     }
//     console.log(res);
//     // db.query(参数一,参数二)
//     // 参数一:sql语法
//     // 参数二:回调函数
//     // 如果参数一是查询语法，则返回数组
// })

// // 2.插入数据
// // 向users表中新增数据，其中username为Spider-Man, password 为pcc321。示例代码如下:
// //要插入到users 表中的数据对象
// const user = { username: 'Spider-Man', password: 'pcc321' }
// //待执行的SQL语句，其中英文的?表示占位符
// const sqlStr = 'INSERT INTO users (username, password) VALUES (?,?)'
// // 使用数组的形式，依次为?占位符指定具体的值
// db.query(sqlStr, [user.username, user.password], (err, res) => {
//     if (err) return console.log(err.message) //失败
//     // affectedRows影响行数
//     if (res.affectedRows === 1) { console.log('插入数据成功') } // 成功
//     // db.query(参数一,参数二,参数三)
//     // 参数一:sql语法
//     // 参数二:数组 使用数组的形式，依次为?占位符指定具体的值
//     // 参数三:回调函数
//     // 如果参数一是INSERT INTO语法，则返回对象，判断res.affectedRows是否插入成功
// })

// // 2.插入数据的便捷方式
// // 向users表中新增数据，其中username为Spider-Man2, password 为pcc4321。示例代码如下:
// // 要插入到users表中的数据对象
// const user2 = { username: 'Spider-Man2', password: 'pcc4321' }
// // 待执行的Sql语句，其中英文的?表示占位符
// const sqlStr2 = 'INSERT INTO users SET ?'
// // 直接将数据对象当作占位符的值
// db.query(sqlStr2, user2, (err, res) => {
//     if (err) return console.log(err.message) //失败
//     if (res.affectedRows === 1) { console.log('插入数据成功') } //成功
//     // db.query(参数一,参数二,参数三)
//     // 参数一:sql语法 其中 SET ? 可以将数据对象当作占位符的值
//     // 参数二:对象 使用对象的形式，依次为SET 会自动将对象展开自动为占位符指定具体的值
//     // 参数三:回调函数
//     // 如果参数一是INSERT INTO语法，则返回对象，判断res.affectedRows是否插入成功
// })

// // 3.更新数据
// // 可以通过如下方式，更新表中的数据:
// // 1.要更新的数据对象
// const user3 = { id: 20, username: 'aaa', password: '000' }
// //2.要执行的SQL语句
// const sqlStr3 = 'UPDATE users SET username=?, password=? WHERE id=?'
// //调用db.query() 执行SQL语句的同时，使用数组依次为占位符招定具体的值
// db.query(sqlStr3, [user3.username, user3.password, user3.id], (err, res) => {
//     if (err) return console.log(err.message) //失败
//     if (res.affectedRows === 1) { console.log('更新数据成功!') } //成功
// })

// // 3.更新数据的便捷方式
// // 可以通过如下方式，更新表中的数据:
// // 1.要更新的数据对象
// const user4 = { id: 12, username: 'bbb', password: '000' }
// //2.要执行的SQL语句
// const sqlStr4 = 'UPDATE users SET ? WHERE id=?'
// //调用db.query() 执行SQL语句的同时，使用数组依次为占位符招定具体的值
// db.query(sqlStr4, [user4, user4.id], (err, res) => {
//     if (err) return console.log(err.message) //失败
//     if (res.affectedRows === 1) { console.log('更新数据成功!') } //成功
// })

// // 4.删除数据
// // 在删除数据时，推荐根据id这样的唯一标识。 来删除对应的数据。示例如下:
// //1.要执行的sql语询
// const sqlStr5 = 'DELETE FROM users WHERE id=? '
// //2.调用db.query() 执行SQl语句的同时，为占位符指定具体的值
// db.query(sqlStr5, 4, (err, res) => {
//     //注意:如果SQL语句中有多个占位符，则必须使用数组为每个占位符指定具体的值
//     //如果SQL 语句中只有个占位符， 则可以省略数组
//     if (err) return console.log(err.message) //失败
//     if (res.affectedRows === 1) { console.log('数据成功! ') } //成功
// })

// 4.标记删除
// 使用DELETE语句。会把真正的把数据从表中删除掉。为了保险起见，推荐使用标记删除的形式，来模拟删除的动作。
// 所谓的标记删除，就是在表中设置类似于status 这样的状态字段，来标记当前这条数据是否被删除。
// 当用户执行了删除的动作时，我们并没有执行DELETE语句把数据删除掉，而是执行了UPDATE语句，将这条数据对应
// 的status字段标记为删除即可。
const sqlStr6 = 'UPDATE users SET status=1 WHERE id=?'
//2.调用db.query() 执行SQl语句的同时，为占位符指定具体的值
db.query(sqlStr6, 12, (err, res) => {
    //注意:如果SQL语句中有多个占位符，则必须使用数组为每个占位符指定具体的值
    //如果SQL 语句中只有个占位符， 则可以省略数组
    if (err) return console.log(err.message) //失败
    if (res.affectedRows === 1) { console.log('删除（更新）数据成功! ') } //成功
})